/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import controladores.ConvenioXPeriodoXEstudianteFacadeLocal;
import entidades.DetalleFuncionesDesempenar;
import entidades.DetalleObjetivosEmpresa;
import entidades.DetalleObjetivosPersonales;
import entidades.Entidad;
import entidades.Estudiante;
import entidades.ObjetivoInicial;
import entidades.Sitio;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import negocio.DetalleFuncionesDesempenarInterface;
import negocio.DetalleObjetivosEmpresaInterface;
import negocio.DetalleObjetivosPersonalesInterface;
import negocio.EstudianteInterface;
import negocio.ObjetivoInicialInterface;
import org.primefaces.component.datatable.DataTable;
import entidades.SupervisorEntidad;

/**
 *
 * @author BATAQUERO
 */
@ManagedBean
@ViewScoped
public class FObjetivoInicial implements Formato {

    private ObjetivoInicial objetivoInicial = new ObjetivoInicial();
    @EJB
    private ObjetivoInicialInterface objetivoInicialInterface;
    @EJB
    private ConvenioXPeriodoXEstudianteFacadeLocal convenioXPeriodoXEstudianteFacadeLocal;
    @EJB
    private DetalleFuncionesDesempenarInterface detalleFuncionesDesempenarInterface;
    @EJB
    private DetalleObjetivosEmpresaInterface detalleObjetivosEmpresaInterface;
    @EJB
    private DetalleObjetivosPersonalesInterface detalleObjetivosPersonalesInterface;
    
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    private Estudiante estudiante = new Estudiante();
    private Entidad entidad = new Entidad();
    private Sitio sitio = new Sitio();
    private SupervisorEntidad supervisorEntidad = new SupervisorEntidad();
    
    private List<DetalleObjetivosPersonales> listaDetalleObjetivosPersonales;
    private DetalleObjetivosPersonales detalleObjetivosPersonales;
    private List<DetalleFuncionesDesempenar> listaDetallesFuncionesDesempenar;
    private DetalleFuncionesDesempenar detalleFuncionSeleccionado;
    private List<DetalleObjetivosEmpresa> listaDetalleObjetivosEmpresa;
    private DetalleObjetivosEmpresa detalleObjetivosEmpresa;
    private String funcionDesempenar;
    private String objetivosPersonales;
    private String objetivosEmpresa;
    private DataTable htmlDataTableFunciones;
    private DataTable htmlDataTableObjetivosPer;
    private DataTable htmlDataTableObjetivosEmp;
    private int index;
    private boolean renderedBotonGuardar;
    private boolean renderedBotonEditar;
    private boolean renderedBotonImprimir;
    private String ESTADO_PERIODO = "ACT";

    public FObjetivoInicial() {
    }

    @PostConstruct
    public void InicializarVariables() {
      HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        if (request.getParameter("accionObjetivoInicial") != null) {
            String accion = (String) request.getParameter("accionObjetivoInicial");
            if (accion.equals("Consultar")) {
                if (request.getParameter("objetivoInicial") != null) {
                    objetivoInicial = objetivoInicialInterface.consultarObjetivoInicial(Integer.parseInt(request.getParameter("objetivoInicial").toString()));
                    estudiante = objetivoInicial.getConvenioXPeriodoXEstudiante().getEstudiante();
                    listaDetalleObjetivosEmpresa = objetivoInicial.getDetalleObjetivosEmpresaList();
                    listaDetalleObjetivosPersonales = objetivoInicial.getDetalleObjetivosPersonalesList();
                    listaDetallesFuncionesDesempenar = objetivoInicial.getDetalleFuncionesDesempenarList();
                    renderedBotonGuardar = false;
                    renderedBotonEditar = false;
                    renderedBotonImprimir = true;
                }
            } else {
                if (accion.equals("Editar")) {
                    if (request.getParameter("objetivoInicial") != null) {
                    
                }
                } else {
                    if (accion.equals("Nuevo")) {
                        listaDetalleObjetivosEmpresa = new ArrayList<DetalleObjetivosEmpresa>();
                        listaDetalleObjetivosPersonales = new ArrayList<DetalleObjetivosPersonales>();
                        listaDetallesFuncionesDesempenar = new ArrayList<DetalleFuncionesDesempenar>();
                        estudiante = new Estudiante();
                        estudiante = sessionBean.getUsuarioSession().getEstudiante();
                        entidad = convenioXPeriodoXEstudianteFacadeLocal.consultarConvenioXPeriodoXEstudiante(estudiante.getIdEstudiante(), ESTADO_PERIODO).getIdSitio().getIdEntidad();
                        sitio = convenioXPeriodoXEstudianteFacadeLocal.consultarConvenioXPeriodoXEstudiante(estudiante.getIdEstudiante(), ESTADO_PERIODO).getIdSitio();
                        supervisorEntidad = convenioXPeriodoXEstudianteFacadeLocal.consultarConvenioXPeriodoXEstudiante(estudiante.getIdEstudiante(), ESTADO_PERIODO).getConvenioXPeriodo().getIdSupervisorEntidad();
        
                        renderedBotonGuardar = true;
                        renderedBotonEditar = false;
                        renderedBotonImprimir = false;
                    }
                }
            }
        }
    }

    public boolean isRenderedBotonGuardar() {
        return renderedBotonGuardar;
    }

    public void setRenderedBotonGuardar(boolean renderedBotonGuardar) {
        this.renderedBotonGuardar = renderedBotonGuardar;
    }

    public boolean isRenderedBotonEditar() {
        return renderedBotonEditar;
    }

    public void setRenderedBotonEditar(boolean renderedBotonEditar) {
        this.renderedBotonEditar = renderedBotonEditar;
    }

    public boolean isRenderedBotonImprimir() {
        return renderedBotonImprimir;
    }

    public void setRenderedBotonImprimir(boolean renderedBotonImprimir) {
        this.renderedBotonImprimir = renderedBotonImprimir;
    }

    @Override
    public void ConsultarFormato() {

        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.        
    }

    @Override
    public void DiligenciarFormato() {
        System.out.println("----------entra al metodo diligenciar en FObjetivoInicial-------------");
        try{
            objetivoInicial.setConvenioXPeriodoXEstudiante(convenioXPeriodoXEstudianteFacadeLocal.consultarConvenioXPeriodoXEstudiante(estudiante.getIdEstudiante(),ESTADO_PERIODO));
            objetivoInicial.setIdObjetivosIniciales(objetivoInicialInterface.obtenerMaxId());
            for (DetalleFuncionesDesempenar dfd : listaDetallesFuncionesDesempenar) {
                dfd.setIdDetalleFuncionesDesempenar(detalleFuncionesDesempenarInterface.obtenerMaxId()+listaDetallesFuncionesDesempenar.indexOf(dfd));
                dfd.setIdObjetivosIniciales(objetivoInicial);
            }
            for(DetalleObjetivosEmpresa dfe : listaDetalleObjetivosEmpresa){
                dfe.setIdDetalleObjetivosEmpresa(detalleObjetivosEmpresaInterface.obtenerMaxId()+listaDetalleObjetivosEmpresa.indexOf(dfe));
                dfe.setIdObjetivosIniciales(objetivoInicial);
            }
            for(DetalleObjetivosPersonales doe : listaDetalleObjetivosPersonales){
                doe.setIdDetalleObjetivosPersonales(detalleObjetivosPersonalesInterface.obtenerMaxId()+listaDetalleObjetivosPersonales.indexOf(doe));
                doe.setIdObjetivosIniciales(objetivoInicial);
            }
            objetivoInicial.setDetalleFuncionesDesempenarList(listaDetallesFuncionesDesempenar);
            objetivoInicial.setDetalleObjetivosEmpresaList(listaDetalleObjetivosEmpresa);
            objetivoInicial.setDetalleObjetivosPersonalesList(listaDetalleObjetivosPersonales);
            objetivoInicialInterface.crear(objetivoInicial);
            FacesMessage facesMessage = new FacesMessage("Datos guardados con Ã©xito");
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            limpiarCampos();
        } catch (Exception e) {
            FacesMessage facesMessage = new FacesMessage("Error");
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            e.printStackTrace();
        }
    }

    @Override
    public void AprobarFormato() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void EditarFormato() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void limpiarCampos(){
        objetivoInicial = null;
        listaDetalleObjetivosEmpresa = null;
        listaDetalleObjetivosPersonales = null;
        listaDetallesFuncionesDesempenar = null;
        index = 0;
        htmlDataTableFunciones = null;
        htmlDataTableObjetivosEmp = null;
        htmlDataTableObjetivosPer = null;
        funcionDesempenar = "";
        objetivosEmpresa = "";
        objetivosPersonales = "";
        
    }
    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public Estudiante getEstudiante() {
        return estudiante;
    }

    public void setEstudiante(Estudiante estudiante) {
        this.estudiante = estudiante;
    }

//    public ObjetivoInicial getObjetivosIniciales() {
//        return objetivosIniciales;
//    }
//
//    public void setObjetivosIniciales(ObjetivoInicial objetivosIniciales) {
//        this.objetivosIniciales = objetivosIniciales;
//    }

    public List<DetalleFuncionesDesempenar> getListaDetallesFuncionesDesempenar() {
        return listaDetallesFuncionesDesempenar;
    }

    public void setListaDetallesFuncionesDesempenar(List<DetalleFuncionesDesempenar> listaDetallesFuncionesDesempenar) {
        this.listaDetallesFuncionesDesempenar = listaDetallesFuncionesDesempenar;
    }

    public String getFuncionDesempenar() {
        return funcionDesempenar;
    }

    public void setFuncionDesempenar(String funcionDesempenar) {
        this.funcionDesempenar = funcionDesempenar;
    }

    public DataTable getHtmlDataTableFunciones() {
        return htmlDataTableFunciones;
    }

    public void setHtmlDataTableFunciones(DataTable htmlDataTableFunciones) {
        this.htmlDataTableFunciones = htmlDataTableFunciones;
    }

    /**
     * Adiciona cada una de las funciones ingresadas en el detalles a la lista
     * de detalles que alimenta el dataTable de funciones
     *
     * @param actionEvent
     */
    public void cargarFunciones(ActionEvent actionEvent) {
        DetalleFuncionesDesempenar detallefuncionesdesempenar = new DetalleFuncionesDesempenar(listaDetallesFuncionesDesempenar.size() + 1, funcionDesempenar);
        listaDetallesFuncionesDesempenar.add(detallefuncionesdesempenar);
        funcionDesempenar = "";
    }

    public void cargarObjetivosPersonales(ActionEvent actionEvent) {
        DetalleObjetivosPersonales detalleobjetivospersonales = new DetalleObjetivosPersonales(listaDetalleObjetivosPersonales.size() + 1, objetivosPersonales);
        listaDetalleObjetivosPersonales.add(detalleobjetivospersonales);
        objetivosPersonales = "";
    }

    public void cargarObjetivosEmpresa(ActionEvent actionEvent) {
        DetalleObjetivosEmpresa detalleobjetivosempresa = new DetalleObjetivosEmpresa(listaDetalleObjetivosEmpresa.size() + 1, objetivosEmpresa);
        listaDetalleObjetivosEmpresa.add(detalleobjetivosempresa);
        objetivosEmpresa = "";
    }

    /**
     * Remueve de la lista de detalles el detalle seleccionado por el usuario.
     *
     * @param actionEvent
     */
    public void quitarFunciones(ActionEvent actionEvent) {
        for (int i = 0; i < listaDetallesFuncionesDesempenar.size(); i++) {
            if (index == listaDetallesFuncionesDesempenar.get(i).getIdDetalleFuncionesDesempenar()) {
                listaDetallesFuncionesDesempenar.remove(i);
                index = 0;
            }
        }
    }

    public void quitarObjetivosPersonlaes(ActionEvent actionEvent) {
        for (int i = 0; i < listaDetalleObjetivosPersonales.size(); i++) {
            if (index == listaDetalleObjetivosPersonales.get(i).getIdDetalleObjetivosPersonales()) {
                listaDetalleObjetivosPersonales.remove(i);
                index = 0;
            }
        }
    }

    public void quitarObjetivosEmpresa(ActionEvent actionEvent) {
        for (int i = 0; i < listaDetalleObjetivosEmpresa.size(); i++) {
            if (index == listaDetalleObjetivosEmpresa.get(i).getIdDetalleObjetivosEmpresa()) {
                listaDetalleObjetivosEmpresa.remove(i);
                index = 0;
            }
        }
    }

    /**
     * Carga en la variable index el parÃ¡metro cargado en el f:param del botÃ³n
     * "eliminar detalle" del dataTable.
     *
     * @param actionEvent
     */
    public void cargarIndice(ActionEvent actionEvent) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        index = Integer.parseInt(request.getParameter("param"));
    }

    public void cargarIndiceObjetivosPersonales(ActionEvent actionEvent) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        index = Integer.parseInt(request.getParameter("paramPer"));
    }

    public void cargarIndiceObjetivosEmpresa(ActionEvent actionEvent) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        index = Integer.parseInt(request.getParameter("paramEmp"));
    }

    public DetalleFuncionesDesempenar getDetalleFuncionSeleccionado() {
        return detalleFuncionSeleccionado;
    }

    public void setDetalleFuncionSeleccionado(DetalleFuncionesDesempenar detalleFuncionSeleccionado) {
        this.detalleFuncionSeleccionado = detalleFuncionSeleccionado;
    }

    public DetalleObjetivosPersonales getDetalleObjetivosPersonales() {
        return detalleObjetivosPersonales;
    }

    public void setDetalleObjetivosPersonales(DetalleObjetivosPersonales detalleObjetivosPersonales) {
        this.detalleObjetivosPersonales = detalleObjetivosPersonales;
    }

    public List<DetalleObjetivosPersonales> getListaDetalleObjetivosPersonales() {
        return listaDetalleObjetivosPersonales;
    }

    public void setListaDetalleObjetivosPersonales(List<DetalleObjetivosPersonales> listaDetalleObjetivosPersonales) {
        this.listaDetalleObjetivosPersonales = listaDetalleObjetivosPersonales;
    }

    public DataTable getHtmlDataTableObjetivosPer() {
        return htmlDataTableObjetivosPer;
    }

    public void setHtmlDataTableObjetivosPer(DataTable htmlDataTableObjetivosPer) {
        this.htmlDataTableObjetivosPer = htmlDataTableObjetivosPer;
    }

    public String getObjetivosPersonales() {
        return objetivosPersonales;
    }

    public void setObjetivosPersonales(String objetivosPersonales) {
        this.objetivosPersonales = objetivosPersonales;
    }

    public List<DetalleObjetivosEmpresa> getListaDetalleObjetivosEmpresa() {
        return listaDetalleObjetivosEmpresa;
    }

    public void setListaDetalleObjetivosEmpresa(List<DetalleObjetivosEmpresa> listaDetalleObjetivosEmpresa) {
        this.listaDetalleObjetivosEmpresa = listaDetalleObjetivosEmpresa;
    }

    public DetalleObjetivosEmpresa getDetalleObjetivosEmpresa() {
        return detalleObjetivosEmpresa;
    }

    public void setDetalleObjetivosEmpresa(DetalleObjetivosEmpresa detalleObjetivosEmpresa) {
        this.detalleObjetivosEmpresa = detalleObjetivosEmpresa;
    }

    public DataTable getHtmlDataTableObjetivosEmp() {
        return htmlDataTableObjetivosEmp;
    }

    public void setHtmlDataTableObjetivosEmp(DataTable htmlDataTableObjetivosEmp) {
        this.htmlDataTableObjetivosEmp = htmlDataTableObjetivosEmp;
    }

    public String getObjetivosEmpresa() {
        return objetivosEmpresa;
    }

    public void setObjetivosEmpresa(String objetivosEmpresa) {
        this.objetivosEmpresa = objetivosEmpresa;
    }

    public ObjetivoInicial getObjetivoInicial() {
        return objetivoInicial;
    }

    public void setObjetivoInicial(ObjetivoInicial objetivoInicial) {
        this.objetivoInicial = objetivoInicial;
    }

    public Entidad getEntidad() {
        return entidad;
    }

    public void setEntidad(Entidad entidad) {
        this.entidad = entidad;
    }

    public Sitio getSitio() {
        return sitio;
    }

    public void setSitio(Sitio sitio) {
        this.sitio = sitio;
    }

    public SupervisorEntidad getSupervisorEntidad() {
        return supervisorEntidad;
    }

    public void setSupervisorEntidad(SupervisorEntidad supervisorEntidad) {
        this.supervisorEntidad = supervisorEntidad;
    }

    
}